#include "EnemyAInfo.h"
#include "Exception.h"
#include "Logger.h"

using namespace game_engine::data_format;
using namespace game_engine::utils;

///////////////////////////////////////////////////////////////////////////////
// Constructors and Destructors
///////////////////////////////////////////////////////////////////////////////

EnemyAInfo::EnemyAInfo(void)
    : textureFilename(), initialPosition(), initialSpeed(0.0f), territory()
{
}

EnemyAInfo::~EnemyAInfo(void)
{
}

///////////////////////////////////////////////////////////////////////////////
// Other public methods
///////////////////////////////////////////////////////////////////////////////

void EnemyAInfo::parse(XmlNode *node)
{
    try
    {
        string pos = XmlUtils::getString("initial_position", node);
        initialPosition = Point(pos);
        initialSpeed = XmlUtils::getFLOAT32("initial_speed", node);
        FLOAT32 iniX = XmlUtils::getFLOAT32("territory.initial_x", node);
        FLOAT32 iniY = XmlUtils::getFLOAT32("territory.initial_y", node);
        FLOAT32 finX = XmlUtils::getFLOAT32("territory.final_x", node);
        FLOAT32 finY = XmlUtils::getFLOAT32("territory.final_y", node);
        territory = Rect(iniX, iniY, finY - iniY, finX - iniX);
    } catch (exception &e)
    {
        string msg = "Parsing tile world information failed. ";
        msg.append(e.what());
        Logger::ERR(GAMEENGINE_LOG, msg);
        throw ParserException(msg);
    }
}

///////////////////////////////////////////////////////////////////////////////
// Getters
///////////////////////////////////////////////////////////////////////////////

const string& EnemyAInfo::getTextureFilename(void) const
{
    return textureFilename;
}

const Point& EnemyAInfo::getInitialPosition(void) const
{
    return initialPosition;
}

const FLOAT32 EnemyAInfo::getInitialSpeed(void) const
{
    return initialSpeed;
}

const Rect& EnemyAInfo::getTerritory(void) const
{
    return territory;
}

///////////////////////////////////////////////////////////////////////////////
// Setters
///////////////////////////////////////////////////////////////////////////////

void EnemyAInfo::setTextureFilename(const string &f)
{
    textureFilename = f;
}
